pytorch实现某一维度的数据扩充(repeat、reshape、resize、cat等的用法和区别)

您所在的位置:网站首页 pytorch 维度复制 pytorch实现某一维度的数据扩充(repeat、reshape、resize、cat等的用法和区别)

pytorch实现某一维度的数据扩充(repeat、reshape、resize、cat等的用法和区别)

2023-10-25 19:54| 来源: 网络整理| 查看: 265

场景:想要将一个维度为(a,5,c)的张量扩充至(a,22,c),要求扩充后的张量axis=1的前5行是原张量,剩余行是扩充的数字。即只扩充指定维的数据,没有搜到现成的做法,自己进行了以下尝试:

1、使用repeat()想将b变成和a同size的张量

import torch a = torch.ones(2, 22, 3) b = torch.zeros(2, 5, 3) b1 = b.repeat(1, 22, 1) print(b1.size()) # (2,110,3) # repeat是将指定维重复n次,n必须是整型int

事实证明repeat将指定维重复n次,且n必须是整型int,没办法满足我将axis=1的维从5变到12的想法

2、使用reshape()

import torch a = torch.ones(2, 22, 3) b = torch.zeros(2, 5, 3) b1 = b.reshape(2, 22, 3) #报错

报错,根据报错信息得知,reshape是将张量中的元素重新排列成要求的shape

比如原张量x(a,b,c),reshape之后的张量y(a1,b1,c1),要求a1*b1*c1=a*b*c,即必须满足原来的tensor和reshape的tensor元素个数相等,不能达到我的目的

3、使用resize_()

import torch a = torch.ones(2, 22, 3) b = torch.zeros(2, 5, 3) b1 = b.resize_(2, 22, 3) print(b1.size()) # (2,22,3)

可以使用该方法扩充某一维的数据,但是我输出扩充后的数据如下,发现使用resize_()扩充某一维的数据,会将改维已有数据排在前面,剩余的坑用自带的插值计算出的数来占领,也就是将第1维原来的数据都挤到前面来了。但是我想要第1维的原有数据保持位置不变,其他多出来的坑位用0补齐。

x = torch.ones(2, 4, 2) Y = torch.zeros(2, 2, 2) y3=Y.resize_(2,4,2) print(y3.size()) # (2,4,2) print(y3)

4、最后用了最笨的cat方法,创建一个辅助的全o张量来与需要扩充的张量进行拼接,验证可得到想要的答案。

x = torch.ones(2, 4, 2) Y = torch.ones(2, 2, 2) y3= torch.zeros(2, 2, 2) y4 = cat((Y,y3),1) # 在第一维上进行cat拼接 print(y4.size()) # (2,4,2) print(y4)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3